angular.module('app').config(function ($stateProvider) {

    $stateProvider.state('app.camera', {
        url         : '/camera',
        label       : '照相机',
        controller  : 'app.camera',
        controllerAs: '$ctrl',
        templateUrl : 'view/app/camera/camera.html'
    });
}).controller('app.camera', function ($timeout) {
    var ctrl = this;
    ctrl.options = {
        // 默认照片保存质量
        quality           : 50,
        // DATA_URL/FILE_URI(android)/NATIVE_URI(ios): successHandler 返回的 image 类型, DATA_URL 是 base64, FILE_URI/NATIVE_URI 是文件的 url
        destinationType   : Camera.DestinationType.FILE_URI,
        // PHOTOLIBRARY/CAMERA/SAVEDPHOTOALBUM: CAMERA 表示从相机拍照, PHOTOLIBRARY 表示从相册获取, SAVEDPHOTOALBUM 表示从保存照片的库中获取
        sourceType        : Camera.PictureSourceType.CAMERA,
        // 是否允许修改
        allowEdit         : false,
        // JPEG/PNG: 照片类型.
        encodingType      : Camera.EncodingType.JPEG,
        // 图片的宽度, 必须使用数字
        // targetWidth: 300,
        // 图片的高度, 必须使用数字
        // targetHeight: 400,
        // PICTURE/VIDEO/ALLMEDIA: 设置选择的媒体类型
        mediaType         : Camera.MediaType.PICTURE,
        // 旋转图像来校正在照相时的方向
        correctOrientation: false,
        // 是否在照相后直接把照片保存在相册中
        saveToPhotoAlbum  : false,
        // 指定 popover 在 iPad 中的位置(ios 中才有此配置). 含有事件 window.onorientationchange = function(){...}; 在方向发生变化时触发
        popoverOptions    : {
            x       : 0,
            y       : 32,
            width   : 320,
            height  : 480,
            // ARROW_UP/ARROW_DOWN/ARROW_LEFT/ARROW_RIGHT/ARROW_ANY: popover 的箭头方向
            arrowDir: Camera.PopoverArrowDirection.ARROW_ANY
        },
        // BACK/FRONT: 设置打开相机时使用 后置/前置 摄像头. 注: android 此参数无效, 始终都是使用后置摄像头
        cameraDirection   : Camera.Direction.BACK
    };
    ctrl.capture = function () {
        /**
         * 照相
         */
        navigator.camera.getPicture(successHandler, errorHandler, ctrl.options);
    };

    /**
     * 移除临时文件夹中储存的图像(只支持 ios 平台)
     */
    // navigator.camera.cleanup(function(){
    //     console.log("Camera cleanup success.")
    // }, function (message) {
    //     alert('Failed because: ' + message);
    // });

    function successHandler(image) {
        var img = image;
        if (ctrl.options.destinationType == Camera.DestinationType.DATA_URL) {
            img = "data:image/jpeg;base64," + image;
        }
        $timeout(function () {
            ctrl.img = img;
        });
    }

    function errorHandler(message) {
        alert('Failed because: ' + message);
    }
});